import { HttpStatusCode } from '@/enums/request.enums';

/**
 * 下载文件到指定目录（安卓）
 * @param url 文件下载地址
 * @param filename 保存文件名
 * @param savePath 保存路径，安卓常用：Download、Documents、Pictures
 * @returns Promise<string> 成功返回文件绝对路径
 */
export function downloadToDir(
  url: string,
  filename: string,
  savePath?: string,
  headers?: Record<string, string>
): Promise<void> {
  return new Promise<void>((resolve, reject) => {
    if (!url || !filename) {
      return reject(new Error('url 和 filename 必须提供'));
    }

    // 安卓端处理
    const baseDir = 'file:///storage/emulated/0';

    const targetDir = baseDir + (savePath || '/Download');

    plus.android.requestPermissions(
      [
        'android.permission.WRITE_EXTERNAL_STORAGE',
        'android.permission.READ_EXTERNAL_STORAGE',
        'android.permission.INTERNET',
        'android.permission.ACCESS_WIFI_STATE'
      ],
      () => {
        // 创建下载任务
        const downTask = plus.downloader.createDownload(
          url,
          {
            filename: `${targetDir}/${filename}`
          },
          (d, status) => {
            if (status === HttpStatusCode.Ok) {
              resolve();
            }
            else {
              reject(new Error(`下载失败，状态码：${status}`));
            }
          }
        );

        if (headers) {
          Object.keys(headers).forEach(key => {
            downTask.setRequestHeader(key, headers[key]);
          });
        }
        downTask.start();
      },
      () => reject(new Error('存储权限拒绝'))
    );
  });
}

/**
 * 处理带换行符的 Base64 图片数据
 * @param {string} base64Str 原始的 base64 字符串
 * @param {string} [prefix] 可选：默认加 PNG 前缀
 * @returns {string} base64
 */
export function normalizeBase64(base64Str: string, prefix = 'data:image/png;base64,') {
  if (!base64Str)
    return '';
  // 去掉换行符、空格
  const clean = base64Str.replace(/\s/g, '');
  // 如果本身已有 data:image 前缀，就不要重复加
  if (/^data:image\/[a-zA-Z]+;base64,/.test(clean)) {
    return clean;
  }
  return prefix + clean;
}
